home *** CD-ROM | disk | FTP | other *** search
/ Merciful 4 / Merciful - Disc 4.iso / rexx / vectortext.pprx < prev    next >
Text File  |  1996-11-02  |  7KB  |  260 lines

  1. /* Personal Paint Amiga Rexx script - Copyright © 1996 Cloanto Italia srl */
  2.  
  3. /* $VER: VectorText.pprx 1.0 */
  4.  
  5. /** ENG
  6.  This script renders a vector text in the current environment.
  7.  A requester allows the user to select several parameters, such as
  8.  font, text string, angle, shear angle, bold level, antialiasing, etc.
  9.  The text is drawn using the current foreground color.
  10. */
  11.  
  12. /** DEU
  13.  Mit diesem Skript läßt sich ein Vektortext in der aktuellen
  14.  Umgebung erzeugen. Das dazugehörige Dialogfenster enthält
  15.  Einstellmöglichkeiten für verschiedene Parameter, wie Font,
  16.  Textstring, Winkel, Neigungsgrad, Stärke, Kantenglättung,
  17.  usw. Die Textdarstellung erfolgt in der aktuellen Vordergrundfarbe.
  18. */
  19.  
  20. IF ARG(1, EXISTS) THEN
  21.     PARSE ARG PPPORT x0 y0 rwidth rheight .
  22. ELSE
  23.     EXIT 0  /* macro execution only */
  24.  
  25. ADDRESS VALUE PPPORT
  26. OPTIONS RESULTS
  27. OPTIONS FAILAT 10000
  28.  
  29.  
  30. Get 'LANG'
  31. IF RESULT = 1 THEN DO        /* Deutsch */
  32.     txt_title_req     = "Texteinstellungen"
  33.     txt_gad_font      = "_Font:"
  34.     txt_gad_text      = "_Text:"
  35.     txt_string_text   = "Text"
  36.     txt_gad_angle     = "Wink_el:"
  37.     txt_gad_shear     = "_Neigung:"
  38.     txt_gad_boldx     = "Stärke _X:"
  39.     txt_gad_boldy     = "Stärke _Y:"
  40.     txt_gad_aalias    = "_Kantenglättung:"
  41.     txt_gad_aalias0   = "Keine"
  42.     txt_gad_aalias1   = "Schwach"
  43.     txt_gad_aalias2   = "Mittel"
  44.     txt_gad_aalias3   = "Stark"
  45.     txt_gad_kratio    = "_Verhältnis erhalten:"
  46.     txt_gad_kbline    = "_Grundlinie erhalten:"
  47.     txt_err_oldclient = "Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich"
  48.     txt_err_nofonts   = "Vektorfonts nicht auffindbar"
  49.     txt_err_vtext     = "VektorText-Fehler: "
  50. END
  51. ELSE IF RESULT = 2 THEN DO    /* Italiano */
  52.     txt_title_req     = "Parametri testo"
  53.     txt_gad_font      = "_Font:"
  54.     txt_gad_text      = "_Testo:"
  55.     txt_string_text   = "Testo"
  56.     txt_gad_angle     = "Ang_olo:"
  57.     txt_gad_shear     = "In_clinazione:"
  58.     txt_gad_boldx     = "Grassetto _X:"
  59.     txt_gad_boldy     = "Grassetto _Y:"
  60.     txt_gad_aalias    = "Antialia_s:"
  61.     txt_gad_aalias0   = "Nessuno"
  62.     txt_gad_aalias1   = "Basso"
  63.     txt_gad_aalias2   = "Medio"
  64.     txt_gad_aalias3   = "Alto"
  65.     txt_gad_kratio    = "Asp_etto:"
  66.     txt_gad_kbline    = "Linea di _base:"
  67.     txt_err_oldclient = "Questa procedura richiede_una versione più recente_di Personal Paint"
  68.     txt_err_nofonts   = "Non vi sono font vettoriali"
  69.     txt_err_vtext     = "Errore comando VectorText: "
  70. END
  71. ELSE DO                /* English */
  72.     txt_title_req     = "Text Settings"
  73.     txt_gad_font      = "_Font:"
  74.     txt_gad_text      = "_Text:"
  75.     txt_string_text   = "Text"
  76.     txt_gad_angle     = "_Angle:"
  77.     txt_gad_shear     = "_Shear:"
  78.     txt_gad_boldx     = "Bold _X:"
  79.     txt_gad_boldy     = "Bold _Y:"
  80.     txt_gad_aalias    = "A_ntialias:"
  81.     txt_gad_aalias0   = "None"
  82.     txt_gad_aalias1   = "Low"
  83.     txt_gad_aalias2   = "Medium"
  84.     txt_gad_aalias3   = "High"
  85.     txt_gad_kratio    = "Keep _Ratio:"
  86.     txt_gad_kbline    = "Keep _Baseline:"
  87.     txt_err_oldclient = "This script requires a newer_version of Personal Paint"
  88.     txt_err_nofonts   = "Vector fonts not found"
  89.     txt_err_vtext     = "VectorText error: "
  90. END
  91.  
  92. Version 'REXX'
  93. IF RESULT < 7 THEN DO
  94.     RequestNotify 'PROMPT "'txt_err_oldclient'"'
  95.     EXIT 10
  96. END
  97.  
  98.  
  99. def_font_path = "FONTS:"
  100. max_text_size = 8000
  101.  
  102. font_path = LoadSet('PP_VectorPath', def_font_path, 1, 0)
  103.  
  104.  
  105. ftot = 0
  106. vftfname = 'ENV:PP_VectorFonts'
  107. IF ~OPEN(fexists, vftfname) THEN DO
  108.     ADDRESS COMMAND 'List >'vftfname' 'font_path' PAT=#?.otag NOHEAD LFORMAT="%s"'
  109.     ADDRESS COMMAND 'Sort 'vftfname vftfname'.s'
  110.     IF RC = 0 THEN DO
  111.         ADDRESS COMMAND 'Delete >NIL: 'vftfname
  112.         ADDRESS COMMAND 'Rename >NIL: 'vftfname'.s' vftfname
  113.     END
  114. END
  115. ELSE CALL CLOSE(fexists)
  116.  
  117. IF OPEN('listfile', vftfname) THEN DO
  118.     DO FOREVER
  119.         fline = READLN('listfile')
  120.         IF EOF('listfile') THEN BREAK
  121.         ftot = ftot + 1
  122.         fontname.ftot = LEFT(fline, LENGTH(fline) - 5)
  123.     END
  124.     CALL CLOSE('listfile')
  125. END
  126.  
  127. IF ftot = 0 THEN DO
  128.     RequestNotify 'PROMPT "'txt_err_nofonts'"'
  129.     EXIT 10
  130. END
  131.  
  132.  
  133. fntnum = LoadSet('Font', 0)
  134. text   = LoadSet('Text', txt_string_text)
  135. angle  = LoadSet('Angle', 0)
  136. shear  = LoadSet('Shear', 0)
  137. boldx  = LoadSet('BoldX', 0)
  138. boldy  = LoadSet('BoldY', 0)
  139. aalias = LoadSet('Antialias', 0)
  140. kratio = LoadSet('KeepRatio', 0)
  141. kbline = LoadSet('KeepBaseline', 0)
  142.  
  143. req = '"LIST = ""'txt_gad_font'"", 'ftot', 'fntnum', 20, 5'
  144. DO f = 1 TO ftot
  145.     req = req || ', ""' || fontname.f || '""'
  146. END
  147. req = req ||,
  148.      ' VSPACE = 2 ' ||,
  149.       'STRING = ""'txt_gad_text'"", 'max_text_size', ""'text'"" ' ||,
  150.       'VSPACE = 2 ' ||,
  151.       'SLIDE = ""'txt_gad_angle'"", -360, 360, 'angle' ' ||,
  152.       'SLIDE = ""'txt_gad_shear'"", -45, 45, 'shear' ' ||,
  153.       'SLIDE = ""'txt_gad_boldx'"", -8, 8, 'boldx' ' ||,
  154.       'SLIDE = ""'txt_gad_boldy'"", -8, 8, 'boldy' ' ||,
  155.       'VSPACE = 2 ' ||,
  156.         'CYCLE = ""'txt_gad_aalias'"", 4, 'aalias', ""'txt_gad_aalias0'"", ""'txt_gad_aalias1'"", ""'txt_gad_aalias2'"", ""'txt_gad_aalias3'"" ' ||,
  157.       'CHECK = ""'txt_gad_kratio'"", 'kratio' ' ||,
  158.       'CHECK = ""'txt_gad_kbline'"", 'kbline' ' ||,
  159.       'VSPACE = 2 "'
  160.  
  161. LockGUI
  162. Request 'RESIZE COMPACT "'txt_title_req'" 'req
  163. IF RC = 0 THEN DO
  164.     fntnum = RESULT.1 + 1
  165.     text   = RESULT.2
  166.     angle  = RESULT.3
  167.     shear  = RESULT.4
  168.     boldx  = RESULT.5
  169.     boldy  = RESULT.6
  170.     aalias = RESULT.7
  171.     kratio = RESULT.8
  172.     kbline = RESULT.9
  173.  
  174.     CALL SaveSet('Font', fntnum - 1)        /* setting persistence */
  175.     CALL SaveSet('Text', text)
  176.     CALL SaveSet('Angle', angle)
  177.     CALL SaveSet('Shear', shear)
  178.     CALL SaveSet('BoldX', boldx)
  179.     CALL SaveSet('BoldY', boldy)
  180.     CALL SaveSet('Antialias', aalias)
  181.     CALL SaveSet('KeepRatio', kratio)
  182.     CALL SaveSet('KeepBaseline', kbline)
  183.  
  184.     options = 'DYNAMIC'
  185.     IF kratio THEN
  186.         options = options 'KEEPRATIO'
  187.     IF kbline THEN
  188.         options = options 'KEEPBASELINE'
  189.  
  190.     /* encode quotes */
  191.     pos = 1
  192.     DO FOREVER
  193.         pos = INDEX(text, '"', pos)
  194.         IF pos = 0 THEN
  195.             BREAK
  196.         text = INSERT('"', text, pos)
  197.         pos = pos + 2
  198.     END
  199.  
  200.     VectorText 'TEXT "'text'" FONTPATH "'font_path'" FONTNAME "'fontname.fntnum'" X0 'x0' Y0 'y0' X1 'x0 + rwidth - 1' Y1 'y0 + rheight - 1' ANGLE 'angle * 1000' SHEAR 'shear * 1000' BOLDX 'boldx * 1000' BOLDY 'boldy * 1000' ANTIALIAS 'aalias options
  201.     IF RC > 5 THEN
  202.         RequestNotify 'PROMPT "'txt_err_vtext || RC'"'
  203. END
  204. UnlockGUI
  205.  
  206. EXIT 0
  207.  
  208.  
  209.  
  210.  
  211. SaveSet:
  212.     sname = ARG(1)
  213.     val = ARG(2)
  214.  
  215.     IF OPEN('settingfile', 'ENV:PP_VectorText_'sname, 'W') THEN DO
  216.         CALL WRITECH('settingfile', val)
  217.         CALL CLOSE('settingfile')
  218.     END
  219.  
  220.     RETURN
  221.  
  222.  
  223.  
  224.  
  225. LoadSet:
  226.     sname = ARG(1)
  227.     def_val = ARG(2)
  228.     IF ARG() > 2 THEN
  229.         global_set = ARG(3)
  230.     ELSE
  231.         global_set = 0
  232.     IF ARG() > 3 THEN
  233.         request_quote = ARG(4)
  234.     ELSE
  235.         request_quote = 1
  236.  
  237.     val = def_val
  238.     IF global_set THEN
  239.         set_fname = 'ENV:'sname
  240.     ELSE
  241.         set_fname = 'ENV:PP_VectorText_'sname
  242.  
  243.     IF OPEN('settingfile', set_fname, 'R') THEN DO
  244.         val = READCH('settingfile', 65535)
  245.         CALL CLOSE('settingfile')
  246.     END
  247.  
  248.     IF request_quote THEN DO
  249.         /* encode quotes for the Request command ('"' -> '\""') */
  250.         qpos_start = 1
  251.         DO FOREVER
  252.             qpos = INDEX(val, '"', qpos_start)
  253.             IF qpos = 0 THEN BREAK
  254.             val = INSERT('\"', val, qpos-1)
  255.             qpos_start = qpos + 3
  256.         END
  257.     END
  258.  
  259.     RETURN val
  260.